package com.adaydayup.week2;
/**
 * 二进制间距868
 * 给定一个正整数 n，找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1，返回 0 。
 *
 * 实例：
 * 输入：n = 22
 * 输出：2
 * 解释：22 的二进制是 "10110" 。
 * 在 22 的二进制表示中，有三个 1，组成两对相邻的 1 。
 * 第一对相邻的 1 中，两个 1 之间的距离为 2 。
 * 第二对相邻的 1 中，两个 1 之间的距离为 1 。
 * 答案取两个距离之中最大的，也就是 2 。

 */
public class BinaryGap_868 {
    /*
      位运算
     */
    public int binaryGap(int n) {
        int idx=0;
        int preIdx=n;
        int max=0;
        while(n!=0){
            if((n&1)==1){
                max=Math.max(max,idx-preIdx);
                preIdx=idx;
            }
            idx++;
            n>>=1; // 10110 >>1  01011=11 ,  >>1   00101=5 , >>1   00010=2
        }
        return max;
    }
    /*
    转换为二进制串遍历
     */
    public int binaryGap2(int n) {
        //   Integer.toBinaryString() 将整数转成其对应的二进制字符串
        String str = Integer.toBinaryString(n);
        System.out.println(str);//10110

        int len = str.length();
        int lastindx = len, max = 0;
        for (int i = 0; i < len; i++) {
            if (str.charAt(i) == '1') {
                max = Math.max(max, i - lastindx);
                lastindx = i;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        int n=22;
        BinaryGap_868 binaryGap = new BinaryGap_868();
        int i = binaryGap.binaryGap2(n);
        System.out.println(i);
    }
}
